CM3D2 Converter.fileutil
1import io 2import os 3import shutil 4import tempfile 5 6 7class TemporaryFileWriter(io.BufferedWriter): 8 """ファイルをアトミックに更新します。""" 9 backup_filepath = None 10 __filepath = None 11 __temppath = None 12 13 @property 14 def filepath(self): 15 """ファイルパスを取得します。""" 16 return self.__filepath 17 18 @property 19 def temppath(self): 20 """一時ファイルパスを取得します。""" 21 return self.__temppath 22 23 def __init__(self, filepath, mode='wb', buffer_size=io.DEFAULT_BUFFER_SIZE, backup_filepath=None): 24 """ファイルパスを指定して初期化します。 25 backup_filepath に None 以外が指定された場合、書き込み完了時に 26 バックアップファイルが作成されます。 27 """ 28 dirpath, filename = os.path.split(filepath) 29 fd, temppath = tempfile.mkstemp(prefix=filename + '.', dir=dirpath) 30 try: 31 fh = os.fdopen(fd, mode) 32 super(TemporaryFileWriter, self).__init__(fh, buffer_size) 33 except: 34 if fh: 35 fh.close() 36 os.remove(temppath) 37 raise 38 self.__filepath = filepath 39 self.__temppath = temppath 40 self.backup_filepath = backup_filepath 41 42 def __enter__(self): 43 return self 44 45 def __exit__(self, exc_type, exc_value, traceback): 46 if exc_type is None and exc_value is None and traceback is None: 47 self.close() 48 else: 49 self.abort() 50 51 def close(self): 52 """一時ファイルを閉じてリネームします。""" 53 if self.closed: 54 return 55 super(io.BufferedWriter, self).close() 56 self.raw.close() 57 try: 58 if os.path.exists(self.filepath): 59 if self.backup_filepath is not None: 60 shutil.move(self.filepath, self.backup_filepath) 61 else: 62 os.remove(self.filepath) 63 shutil.move(self.temppath, self.filepath) 64 except: 65 os.remove(self.temppath) 66 raise 67 68 def abort(self): 69 """一時ファイルを閉じて削除します。""" 70 if self.closed: 71 return 72 super(io.BufferedWriter, self).close() 73 self.raw.close() 74 os.remove(self.temppath)
class
TemporaryFileWriter(_io.BufferedWriter):
8class TemporaryFileWriter(io.BufferedWriter): 9 """ファイルをアトミックに更新します。""" 10 backup_filepath = None 11 __filepath = None 12 __temppath = None 13 14 @property 15 def filepath(self): 16 """ファイルパスを取得します。""" 17 return self.__filepath 18 19 @property 20 def temppath(self): 21 """一時ファイルパスを取得します。""" 22 return self.__temppath 23 24 def __init__(self, filepath, mode='wb', buffer_size=io.DEFAULT_BUFFER_SIZE, backup_filepath=None): 25 """ファイルパスを指定して初期化します。 26 backup_filepath に None 以外が指定された場合、書き込み完了時に 27 バックアップファイルが作成されます。 28 """ 29 dirpath, filename = os.path.split(filepath) 30 fd, temppath = tempfile.mkstemp(prefix=filename + '.', dir=dirpath) 31 try: 32 fh = os.fdopen(fd, mode) 33 super(TemporaryFileWriter, self).__init__(fh, buffer_size) 34 except: 35 if fh: 36 fh.close() 37 os.remove(temppath) 38 raise 39 self.__filepath = filepath 40 self.__temppath = temppath 41 self.backup_filepath = backup_filepath 42 43 def __enter__(self): 44 return self 45 46 def __exit__(self, exc_type, exc_value, traceback): 47 if exc_type is None and exc_value is None and traceback is None: 48 self.close() 49 else: 50 self.abort() 51 52 def close(self): 53 """一時ファイルを閉じてリネームします。""" 54 if self.closed: 55 return 56 super(io.BufferedWriter, self).close() 57 self.raw.close() 58 try: 59 if os.path.exists(self.filepath): 60 if self.backup_filepath is not None: 61 shutil.move(self.filepath, self.backup_filepath) 62 else: 63 os.remove(self.filepath) 64 shutil.move(self.temppath, self.filepath) 65 except: 66 os.remove(self.temppath) 67 raise 68 69 def abort(self): 70 """一時ファイルを閉じて削除します。""" 71 if self.closed: 72 return 73 super(io.BufferedWriter, self).close() 74 self.raw.close() 75 os.remove(self.temppath)
ファイルをアトミックに更新します。
TemporaryFileWriter(filepath, mode='wb', buffer_size=8192, backup_filepath=None)
24 def __init__(self, filepath, mode='wb', buffer_size=io.DEFAULT_BUFFER_SIZE, backup_filepath=None): 25 """ファイルパスを指定して初期化します。 26 backup_filepath に None 以外が指定された場合、書き込み完了時に 27 バックアップファイルが作成されます。 28 """ 29 dirpath, filename = os.path.split(filepath) 30 fd, temppath = tempfile.mkstemp(prefix=filename + '.', dir=dirpath) 31 try: 32 fh = os.fdopen(fd, mode) 33 super(TemporaryFileWriter, self).__init__(fh, buffer_size) 34 except: 35 if fh: 36 fh.close() 37 os.remove(temppath) 38 raise 39 self.__filepath = filepath 40 self.__temppath = temppath 41 self.backup_filepath = backup_filepath
ファイルパスを指定して初期化します。 backup_filepath に None 以外が指定された場合、書き込み完了時に バックアップファイルが作成されます。
def
close(self):
52 def close(self): 53 """一時ファイルを閉じてリネームします。""" 54 if self.closed: 55 return 56 super(io.BufferedWriter, self).close() 57 self.raw.close() 58 try: 59 if os.path.exists(self.filepath): 60 if self.backup_filepath is not None: 61 shutil.move(self.filepath, self.backup_filepath) 62 else: 63 os.remove(self.filepath) 64 shutil.move(self.temppath, self.filepath) 65 except: 66 os.remove(self.temppath) 67 raise
一時ファイルを閉じてリネームします。
def
abort(self):
69 def abort(self): 70 """一時ファイルを閉じて削除します。""" 71 if self.closed: 72 return 73 super(io.BufferedWriter, self).close() 74 self.raw.close() 75 os.remove(self.temppath)
一時ファイルを閉じて削除します。
Inherited Members
- _io.BufferedWriter
- detach
- seekable
- writable
- fileno
- isatty
- write
- truncate
- flush
- seek
- tell
- raw
- closed
- name
- mode
- _io._BufferedIOBase
- read
- read1
- readinto
- readinto1
- _io._IOBase
- readable
- readline
- readlines
- writelines